بسم الله الرحمن الرحیم
ساختن Workflow یکی از امتیازات مهم شیرپونته که باعث می شه اتوماسیون های پیشرفته و خوبی رو پیاده سازی کنیم و از هزینه های گزاف این گونه نرم افزارها خلاص بشیم.در این مورد متاسفانه منابع فارسی خوبی رو پیدا نکردم ولی بعد از کلی جستجو یه مقاله خیلی خوب و مفید پیدا کردم که سعی می کنم ترجمه ی قسمت های مهم اش رو اینجا بذارم تا مورد استفاده قرار بگیره.اصل این مقاله در این ادرس قابل دریافته .
این رو هم اضافه کنم که نویسنده این مقاله آقای سرژ لوکا (Serge Luca ) هستن .
یکی از بزرگترین نوآوری ها در نسخه های قبلی شیرپوینت (MOSS 2007 و WSS V3) ادغام Net framework با Windows Workflow Foundation بود.آخرین نسخه از شیرپوینت Microsoft Sharepoint Server 2010 و Microsoft Foundation 2010 ، بر اساس .Net framework 3.5 است . بخش Net framework 3.5 ، Workflow. تغییرات زیادی نکرده است و مفاهیم تقریبا همان مفاهیم قبلی هستند .
در این سری از مقالات، من به صورت گام به گام روش ساختن Workflow در شیرپوینت را با هر دو ابزار مایکروسافت ویژوال استودیو 2010، share point design 2010 و Visio 2010 توضیح خواهم داد . این پست فقط بخش اصلی ماجرا را پوشش می دهد : ایجاد یک پروژه، راه اندازی یک Workflow و توضیح برخی از مفاهیم اصلی .از آنجایی که این یک آموزش گام به گام است کدی که اینجا می آوریم در پست های بعدی بروز آوری خواهد شد .
برای این آموزش بحث تایید لیست هزینه را در نظر گرفته ایم .
سناریوی اصلی: در این سناریو اپلیکیشنی تولید می شود که کاربران توسط آن لیست هزینه های خود را به تایید مدیر خود می رسانند . به محض اینکه صورت حساب هزینه ها دیده شود ، گردش کار فعال می شود . گردش کار به صورت زیر است :
- ایجاد یک شناسه منحصر به فرد برای این گزارش هزینه (GUID)
- چک می کند که آیا صورت حساب نیاز به تایید دارد ؟ : در صورتی که هزینه صورت حساب زیر 1000 باشد وضعیت صورتحساب خود به خود به حالت تایید شده تبدیل می شود و گردش کار پایان می یابد .
- مدیر کاربر مشخص می شود
- یک task برای مدیر ، تولید می شود که آیا لیست را تایید می کند یا خیر
- وضعیت صورت حساب بروز آوری می شود
قبل از شروع شما به یک سایت شیر پوینت (دقت کنید که تمپلیت انتخابی شما از نوع search نباشد ) و لیست های زیر نیاز دارید :
1- یک لیست با عنوان Expense Reports که شامل ستون های زیر است :
2- یک لیست با عنوان Managersکه شامل ستون های زیر است :
لیست Managers را توسط اطلاعات موجود پر کنید (مشخص کنید مدیر هر کس چه کسی است )
حواستان باشد که کاربران انتخاب دسترسی های کافی برای کار با سایت و لیست را داشته باشند .
ساخت Workflow
! توجه داشته باشید که Visual studio 2010 و Sharepoint 2010 می بایست در یک دستگاه نصب شده باشند .
برای شروع Visual Studio 2010 را استارت کنید و یک پروژه جدید با تمپلیت Sharepoint 2010 از نوع Empty Sharepoint Project template ایجاد نمایید عنوان پروژه را Litware.ExpenseReport بگذارید :
در پنجره بعدی آدرس وب سایت خود را وارد کنید و گزینه Deploy as a Farm solution را انتخاب نمایید . توجه داشته باشید که Workflow ساخته شده در Visual Studio نمی تواند در sandbox اجرا شود .
یک آیتم شیرپوینتی جدید در Sequential Workflow پروژه خود ایجاد نمایید .نامش را ExpenseReportWorkflow بگذارید :
از آنجا که Workflow برای ایجاد ارتباط میان کاربران از طریق تعیین وظایف استفاده می شود ، ما معمولا (اما این اجباری نیست) نیاز به یک لیست وظایف داریم ،من لیست وظایف ساخته شده توسط تمپلیت سایت را در خود شیر پوینت توصیه می کنم .خوب است بدانید اگر هیچ لیست وظایفی در سایت شما تعریف نشده باشد ویژوال استدیو خطا میدهد :
خیلی نگران این مسئله نباشید ولی آن را در ذهنتان نگه دارید خب به سراغ مرحله بعدی می رویم
در پنجره بعدی شما مشخص می کنید که آیا می خواهید گردش کار تعریف شده شما به لیست آیتم های شیرپوینتی اضافه شود (لیست Workflow ) یا نه (به عنوان یک Site Workflow که از گزینه های جدید شیرپوینت 2010 است قرار بگیرد ) از آنجا که صورت حساب های ما در لیست گزارش هزینه های شیرپوینتمان ذخیره می شود گزینه اول را انتخاب می کنیم و روی NEXT کلیک می کنیم
در پنجره بعدی لیستی را که Workflow ما به آن متصل می شود ، انتخاب می کنیم . در این مثال لیست گزارش هزینه ها را انتخاب می کنیم و روی NEXT کلیک می کنیم :
این پنجره این امکان را می دهد که برخی از پارامتر های انجمنی را تغییر دهیم : وقتی ما یک Workflow را به یک لیست وصل می کنیم (البته بعدا هم می توانیم آن را به صورت دستی مرتبط کنیم ، این را در آینده خواهم گفت )، می توانیم مشخص کنیم که Workflow به صورت دستی شروع شود یا خود به خود هنگام ایجاد یا تغییر یک آیتم در لیست اغاز به کار کند .بعدا هم می توانیم این نکته را مشخص کنیمفعلا طبق شکل زیر عمل می کنیم
Finish را انتخاب می نماییم.با اتمام این عملیات شما باید شکل گرافیکی از Workflow خود را در Workflow Disigner پروژه خود ببینید . به صورت زیر :
اولین فعالیت (مرحله ) یکWorkflow شیر پوینتی در ویژوال استودیو می بایست OnWorkflowActivated باشد .حالا بخش Solution Explorer پروژه خود را باز کنید . خواهید دید که یک آیتم جدید از نوع Workflow به آیتم های پروژه شما اضافه شده است . کد دات نت مرتبط با این گردش کار در فایل ExpenseReportWorkflow.cs ، که درواقع یک کلاس است قابل دسترسی است . ما معمولا این کلاس را workflow template می نامیم .
بگذارید کارهایی را که تا کنون انجام داده ایم را به صورت build & deploy دربیاوریم .به منوی build رفته و گزینه Deploy Solution را انتخاب نمایید.این کار باعث تولید کدی می شود که workflow template نامیده می شود . نسخه های متعددی از کد این workflow template می تواند به یک لیست و یا چندین لیست در یک سایت کالکشن مرتبط شود .
حالا به وب سایت شیرپوینتی خود برگردید . روی Expense Reports کلیک نمایید تا بخش ریبون لیست آن فعال شود .طبق تصویر زیر در بخش list settings گزینه Workflow Settings را انتخاب نمایید :
در صفحه مربوط به Workflow Settings تمپلیت های قابل استفاده برای لیست در دسترس هستند . (تمپلیت Workflow که ما ساخته بودیم هم اینجا قابل استفاده است چون در هنگام تنظیم ویژگی های شیرپوینتی اش ان را در محدوده همین سایت کالکشن تعریف کرده بودیم) در این باره بعد ها بیشتر صحبت خواهیم کرد .
در این پنجره شما می توانید Workflow مورد نظر خود را به لیست مربوطه متصل کنید . واضح است که در این مرحله ما فقط یک Workflow ( که توسط ویزوال استودیو درست کردیم ) خواهیم داشت . با توجه به نام گذاری ای که کرده ایم نام آن Litware.ExpenseReports-ExpenseReportWorkflow خواهد بود . البته شما می توانید با کلیک بر روی Workflow ، Add a workflow های دیگری را اضافه نمایید .با بازکردن لیست باز شونده شما می توانید لیست Workflow ها را ببینید . روی لینک ارتباطی Litware.ExpenseReports-ExpenseReportWorkflow کلیک کنید تا وارد بخش زیر شوید .
خب حالا بر روی ok کلیک کنید . به سایت برگردید و در لیست هزینه ها، یک آیتم جدید اضافه نمایید .
آن را ذخیره کنید . از آنجا که در هنگام مرتبط کردنWorkflow و لیست گزینه start when a new item is created را فعال کرده ایم یک نمونه از تمپلیت Workflow تعریف شده ساخته می شود . در واقع اگر به نمای لیست خود برگردید خواهید دید که یک ستون جدید با همان نام Workflow شما به لیست اضافه شده است :
اگر بر روی گزینه completed کلیک کنید شما صفحه ای را خواهید دید که وضعیت ، تاریخچه و task های Workflow شما را نمایش می دهد .
استفاده از activity هایWorkflow
هرWorkflow مجموعه ای از مراحل است . هر مرحله یک activity است . activity ها کلاس های دات نت هستند . ما هم می توانیم از activity های موجود استفاده کنیم و هم می توانیم activity های دلخواه خود را بسازیم .در آینده نشان خواهم داد که چطور این کار را انجام دهید .زیر ساخت( workflow Foundation ( WF مجموعه ای از اسمبلی هاست که که در پوشه resorce های پروژه ویژوال استدیو ما قابل مشاهده است .
(workflow Foundation (WF به عنوان بخشی از فریم ورک دات نت 3.5 اکتیویتی های جذاب بسیاری را فراهم می کند که می توان در شیر پوینت استفاده کرد . (البته تمام اکتیویتی های WF در شیر پوینت قابل استفاده نیستند ) این اکتیویتی ها در اسمبلی System.Workflow.Activities قابل دسترسی است . علاوه بر این ، تیم شیر پوینت ، اکتیویتی هایی را تولید کرده اند که مختص شیر پوینت است . شما می توانید از این اکتیویتی ها تحت اسمبلی Microsoft.Sharepoint.WorkflowActions استفاده نمایید .
این اسمبلی در فولدر 14\ISAPI قابل دسترسی است و به صورت پیشفرض در refrens های ویژوال استدیو 2010 قرار دارد .این اکتویتی ها در پنل شیر پوینت جعبه ابزار قرار دارند که شما می توانید با گرفتن و کشیدن آنها به سطح Workflow designer آنها را به پروژه خود اضافه نمایید .
قابل توجه دوستداران wf : بیشتر اکتیویتی ها یا از HandleExternalEventActivity مشتق شده اند که یک wf اولیه هستند که منتظر رخ دادن یک رویداد باقی می ماند و یا از CallExternalMethod مشتق می شوند که به عنوان یک کلاس اجرایی از یک اینترفیس مطرح می شوند ( این کلاس local service نامیده می شود )
ارتباط میان میزبان workfllowruntime ( که در این مقاله شیر پوینت است ) و خود Workflow از یک الگوی متداول تبعیت می کند که توسط تیم Windows Workflow Foundation طراحی شده است :
• شیر پوینت از طریق فرستادن رویداد (event) ها با Workflow ارتباط برقرار می کند
• Workflow شیر پوینت را از طریق فراخوانی متد های یک اینترفیس اختصاصی که فراخوانی ها را به API شیر پوینت هدایت می کند صدا می زند .
این اینترفیس ها در name space ، Microsoft.Sharepoint.Workflow از اسمبلی Microsoft.Sharepoint تعریف شده اند . برای آنکه مطمئن شویم Workflow اولیه ما بالاخره می تواند عبارت Hello World را نمایش دهد اکتیویتی LogToHistoryListActivity را به سطح workfllow design خود می کشیم .
حالا در workfllow designer روی logToHistoryActivity کلیک می کنیم . به صفحه مشخصات آن بروید و در بخش HistoryOutcome عبارت Hello World را وارد نمایید .
طبق مراحل قبلی از solusion خود یک اجرا بگیرید . به لیست هزینه های خود برگردید ، آیتمی را که دفعه قبل وارد کرده اید انتخاب کنید و در ریبون بالا گزینه Workflow را انتخاب نمایید .
پنجره start workflow باز می شود :
بر روی کلید workflow کلیک کنید تا گردش کار شما آغاز شود . بعد از استارت شدن خواهید دید که عبارت hello world در ستون outcom قرار گرفته است :
ویژگی های workflow
Workflow هایی که در ویژوال استودیو تولید می شوند منطقا به صورت ویژگی های یک سایت کالکشن بسته بندی می شوند . اگر این ویزگی فعال نباشد ، تمپلیت Workflow غیر قابل استفاده خواهد بود .Workflow هایی که در ویژوال استدیو تولید می شوند به صورت dll هایی ساخته می شوند که می بایست در GAC نصب گردند . بنا بر این ، این workflow ها در محیط sandbox قابل اجرا نیستند . حتی اگر sandbox دلخواه خود را طبق آموزشی که در پست دیگری داده ام بسازیم .
اگر نگاهی به فایل elements.xml که ویژگی های workflow را در بردارد بیاندازید خواهید دید که تگ <workflow> که به نام کلاس workflow اشاره می کند به عنوان placeholder نام اسمبلی عمل می کند .تگ <AssociationCategories>در شیر پوینت 2010 اضافه شده مشخص می کند که workflow به چه نوع محتوایی اعم از لیست ، سایت و یا انواع دیگر محتوا متصل شده است .
تگ <StatusPageUrl> هم صفحه aspx ای را که دربردارنده وضعیت workflow است ، مشخص می کند . به صورت پیش فرض این صفحه _layouts/WrkStat.aspx است ولی می نواند با صفحات دیگری جایگزین شود .
تغییر تنظیمات ویزارد
برای تغییر تنظیماتی که به صورت ویزارد توسط ویژوال استدیو ست کردیم ، می بایست از صفحه properties workflow خود عمل کنیم . به طور مثال task لیست را عوض کنیم و یا اینکه اتصال اتوماتیک را از طریق Auto Associate کنسل کنیم .
اگر به طور مثال شما بخواهید لیست task ها را عوض کنید یک پنجره ویزارد نمایش داده خواهد شد :
CODE
اگر فایل ExpoenseReportWorkflow.cs را باز کنید یک کلاس می بینید که توسط SequentialWorkflowActivity که ریشه کلاس های Sequential workflows است درایو شده است . در کل دو نوع workflow داریم . Sequential workflows و State Machine workflow ها که در پست های بعدی آنها را توضیح خواهم داد .اگر کد بخش دیزاینر را باز کنید خواهید دید که هر اکتیویتی عضوی از یک کلاس است :
در مرحله بعدی به توسعه این work flow خواهیم پرداخت